package com.lcq.gulimall.product.service.impl;

import com.lcq.gulimall.product.vo.Attr;
import com.lcq.gulimall.product.vo.AttrValueWithSkuIdVo;
import com.lcq.gulimall.product.vo.ItemSaleAttrVo;
import javafx.util.Pair;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lcq.common.utils.PageUtils;
import com.lcq.common.utils.Query;

import com.lcq.gulimall.product.dao.SkuSaleAttrValueDao;
import com.lcq.gulimall.product.entity.SkuSaleAttrValueEntity;
import com.lcq.gulimall.product.service.SkuSaleAttrValueService;


@Service("skuSaleAttrValueService")
public class SkuSaleAttrValueServiceImpl extends ServiceImpl<SkuSaleAttrValueDao, SkuSaleAttrValueEntity> implements SkuSaleAttrValueService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<SkuSaleAttrValueEntity> page = this.page(
                new Query<SkuSaleAttrValueEntity>().getPage(params),
                new QueryWrapper<SkuSaleAttrValueEntity>()
        );

        return new PageUtils(page);
    }

    @Override
    public void saveSaleAttrs(Long skuId, List<Attr> attrs) {
        if(attrs==null||attrs.size()==0){
            return;
        }
        List<SkuSaleAttrValueEntity> saleEntities = attrs.stream().map((attr)->{
            SkuSaleAttrValueEntity saleEntity = new SkuSaleAttrValueEntity();
            saleEntity.setAttrId(attr.getAttrId());
            saleEntity.setAttrName(attr.getAttrName());
            saleEntity.setAttrValue(attr.getAttrValue());
            saleEntity.setSkuId(skuId);
            return saleEntity;
        }).collect(Collectors.toList());
        this.saveBatch(saleEntities);
    }

    public List<ItemSaleAttrVo> getSaleAttr1(List<Long> spuIds) {
        List<SkuSaleAttrValueEntity> entities = this.getBaseMapper().selectList(new QueryWrapper<SkuSaleAttrValueEntity>().in("sku_id", spuIds));
        if(entities==null||entities.size()==0){
            return null;
        }

        Map<Pair<Long,String>,List<AttrValueWithSkuIdVo>> map = new HashMap();
        for (SkuSaleAttrValueEntity entity : entities) {
            List<AttrValueWithSkuIdVo> attrValueWithSkuIdVos = map.get(entity.getAttrId());
            if(attrValueWithSkuIdVos==null){
                attrValueWithSkuIdVos = new ArrayList<>();
                map.put(new Pair<>(entity.getAttrId(),entity.getAttrName()),attrValueWithSkuIdVos);
            }
            AttrValueWithSkuIdVo vo = new AttrValueWithSkuIdVo();
            vo.setAttrValue(entity.getAttrValue());
            vo.setSkuIds(vo.getSkuIds()+";"+entity.getAttrId());
            attrValueWithSkuIdVos.add(vo);
        }

        List<ItemSaleAttrVo> list = new ArrayList<>();
        for (Pair<Long,String> pair : map.keySet()) {
            ItemSaleAttrVo vo = new ItemSaleAttrVo();
            vo.setAttrId(pair.getKey());
            vo.setAttrName(pair.getValue());
            //vo.setAttrValues(map.get(pair));
            list.add(vo);
        }

        return list;
    }
    @Override
    public List<ItemSaleAttrVo> getSaleAttr(Long spuId) {
        return this.getBaseMapper().getSaleAttr(spuId);
    }

    @Override
    public List<String> getSkuSaleAttrList(Long skuId) {
        return this.getBaseMapper().getSkuSaleAttrList(skuId);
    }
}